/*
* CCVisu is a tool for visual graph clustering
* and general force-directed graph layout.
* This file is part of CCVisu.
*
* Copyright (C) 2005-2012 Dirk Beyer
*
* CCVisu is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* CCVisu is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with CCVisu; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Please find the GNU Lesser General Public License in file
* license_lgpl.txt or http://www.gnu.org/licenses/lgpl.txt
*
* Dirk Beyer (firstname.lastname@uni-passau.de)
* University of Passau, Bavaria, Germany
*/
package org.sosy_lab.ccvisu.readers.factextractor;
import org.eclipse.jdt.core.dom.EnumDeclaration;
import org.eclipse.jdt.core.dom.IMethodBinding;
import org.eclipse.jdt.core.dom.IPackageBinding;
import org.eclipse.jdt.core.dom.ITypeBinding;
import org.eclipse.jdt.core.dom.MethodDeclaration;
import org.eclipse.jdt.core.dom.MethodInvocation;
import org.eclipse.jdt.core.dom.PackageDeclaration;
import org.eclipse.jdt.core.dom.Type;
import org.eclipse.jdt.core.dom.TypeDeclaration;
import com.google.common.base.Strings;
public class FactUtils {
/** The name of the package of a class, if no package is given. */
public final static String DEFAULT_PACKAGE_NAME = "(default)";
public static String getMethodFullName(MethodDeclaration md) {
assert md != null;
StringBuilder result = new StringBuilder();
if (md.getParent() instanceof TypeDeclaration) {
TypeDeclaration typeDeclaration = (TypeDeclaration) md.getParent();
ITypeBinding typeBinding = typeDeclaration.resolveBinding();
IPackageBinding packageBinding = typeBinding.getPackage();
result.append(FactUtils.getPackageName(packageBinding));
result.append('.');
result.append(typeDeclaration.getName().getFullyQualifiedName());
result.append('.');
}
result.append(md.getName().getFullyQualifiedName()).append("()");
return result.toString();
}
public static String getTypeFullName(MethodDeclaration md) {
assert md != null;
StringBuffer result = new StringBuffer();
if (md.getParent() instanceof TypeDeclaration) {
TypeDeclaration typeDeclaration = (TypeDeclaration) md.getParent();
ITypeBinding typeBinding = typeDeclaration.resolveBinding();
IPackageBinding packageBinding = typeBinding.getPackage();
result.append(FactUtils.getPackageName(packageBinding));
result.append('.');
result.append(typeDeclaration.getName().getFullyQualifiedName());
}
return result.toString();
}
public static String getTypeFullName(ITypeBinding typeBinding) {
if (typeBinding == null) { return null; }
StringBuffer result = new StringBuffer();
IPackageBinding packageBinding = typeBinding.getPackage();
result.append(FactUtils.getPackageName(packageBinding));
result.append('.');
result.append(typeBinding.getName());
return result.toString();
}
public static String getTypeFullName(TypeDeclaration type) {
String result = null;
ITypeBinding typeBinding = type.resolveBinding();
IPackageBinding packageBinding = typeBinding.getPackage();
result = FactUtils.getPackageName(packageBinding) + "."
+ typeBinding.getName();
return result;
}
public static String getEnumFullName(EnumDeclaration pEnum) {
String result = null;
ITypeBinding typeBinding = pEnum.resolveBinding();
IPackageBinding packageBinding = typeBinding.getPackage();
result = FactUtils.getPackageName(packageBinding) + "."
+ typeBinding.getName();
return result;
}
public static String getTypeFullName(Type type) {
if (type == null) { return null; }
ITypeBinding typeBinding = type.resolveBinding();
if (typeBinding == null) { return null; }
IPackageBinding packageBinding = typeBinding.getPackage();
String result = FactUtils.getPackageName(packageBinding) + "."
+ typeBinding.getName();
return result;
}
public static String getTypeFullName(MethodInvocation mi) {
String result = null;
IMethodBinding methodBinding = mi.resolveMethodBinding();
if (methodBinding != null) {
ITypeBinding typeBinding = methodBinding.getDeclaringClass();
IPackageBinding packageBinding = typeBinding.getPackage();
result = FactUtils.getPackageName(packageBinding) + "."
+ typeBinding.getName();
}
return result;
}
private static String getPackageName(IPackageBinding packageBinding) {
String result = packageBinding.getName();
if (Strings.isNullOrEmpty(result)) {
result = FactUtils.DEFAULT_PACKAGE_NAME;
}
return result;
}
public static String getPackageName(ITypeBinding typeBinding) {
IPackageBinding packageBinding = typeBinding.getPackage();
return FactUtils.getPackageName(packageBinding);
}
public static String getPackageName(MethodDeclaration md) {
String result = null;
IMethodBinding methodBinding = md.resolveBinding();
if (methodBinding != null) {
ITypeBinding typeBinding = methodBinding.getDeclaringClass();
IPackageBinding packageBinding = typeBinding.getPackage();
result = FactUtils.getPackageName(packageBinding);
}
return result;
}
public static String getPackageName(EnumDeclaration node) {
String result = null;
ITypeBinding typeBinding = node.resolveBinding();
if (typeBinding != null) {
IPackageBinding packageBinding = typeBinding.getPackage();
result = FactUtils.getPackageName(packageBinding);
}
return result;
}
public static String getMethodFullName(MethodInvocation mi) {
String result = null;
IMethodBinding methodBinding = mi.resolveMethodBinding();
if (methodBinding != null) {
ITypeBinding typeBinding = methodBinding.getDeclaringClass();
IPackageBinding packageBinding = typeBinding.getPackage();
result = FactUtils.getPackageName(packageBinding) + "."
+ typeBinding.getName() + "." + methodBinding.getName() + "()";
}
return result;
}
public static String getPackageName(MethodInvocation mi) {
String result = null;
IMethodBinding methodBinding = mi.resolveMethodBinding();
if (methodBinding != null) {
ITypeBinding typeBinding = methodBinding.getDeclaringClass();
IPackageBinding packageBinding = typeBinding.getPackage();
result = packageBinding.getName();
if (Strings.isNullOrEmpty(result)) {
result = FactUtils.DEFAULT_PACKAGE_NAME;
}
}
return result;
}
public static String getPackageName(TypeDeclaration type) {
String result = null;
ITypeBinding typeBinding = type.resolveBinding();
IPackageBinding packageBinding = typeBinding.getPackage();
result = packageBinding.getName();
if (Strings.isNullOrEmpty(result)) {
result = FactUtils.DEFAULT_PACKAGE_NAME;
}
return result;
}
public static String getPackageName(PackageDeclaration pckg) {
String result = null;
result = pckg.getName().getFullyQualifiedName();
if (Strings.isNullOrEmpty(result)) {
result = FactUtils.DEFAULT_PACKAGE_NAME;
}
return result;
}
public static String getPackageName(Type superclassType) {
String result = null;
if (superclassType == null) { return null; }
ITypeBinding typeBinding = superclassType.resolveBinding();
if (typeBinding == null) { return null; }
IPackageBinding packageBinding = typeBinding.getPackage();
result = packageBinding.getName();
if (Strings.isNullOrEmpty(result)) {
result = FactUtils.DEFAULT_PACKAGE_NAME;
}
return result;
}
}